/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package buscapalabras;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Felipe Ximénez
 */
public class BuscaPalabras {
    
    /**
     * este metodo extrae las palabras que va a buscar y crea una Array list
     * @param rutaArchivo ruta del archivo con las palabras a buscar
     * @return Array list con palabras a buscar
     */
    public ArrayList<String> extraerPalabrasBusqueda(String rutaArchivo){
        File filePalabras = new File(rutaArchivo);
        ArrayList<String> palabrasExtraidas = new ArrayList<String>();
        try {
            BufferedReader br = new BufferedReader(new FileReader(filePalabras));
            String linea = "";
            while((linea = br.readLine()) != null){
                if(linea.length() > 0 ){
                    palabrasExtraidas.add(linea.trim());
                }
            }
        } catch (FileNotFoundException ex) {
            System.out.println("No existe el archivo de palabras");
            ex.printStackTrace();
          
        } catch (IOException ex) {
            System.out.println("No pudo leer el archivo de palabras");
            ex.printStackTrace();
            
        } 
        return palabrasExtraidas;
        
    }
    
    /**
     * Cargar el contenido del archivo de texto en un String
     * @param rutaArchivo String ruta del archivo
     * @return String con el texto del archivo
     */
    public String obtenerTextoObjetivo(String rutaArchivo){
        File fileTexto = new File(rutaArchivo);
        String texto = "";
        try {
            BufferedReader br = new BufferedReader(new FileReader(fileTexto));
            String linea = "";
            while((linea = br.readLine()) != null){
                if(linea.length() > 0 ){
                    texto += " "+ linea;
                }
            }
        } catch (FileNotFoundException ex) {
            System.out.println("No existe el archivo de palabras");
            ex.printStackTrace();
            texto = null;
        } catch (IOException ex) {
            System.out.println("No pudo leer el archivo de palabras");
            ex.printStackTrace();
            texto = null;
        } 
        return texto;
    }

    /**
     * Encuentra la cantidad de veces q aparece cada palabra de la lista en el texto
     * @param palabras ArrayList lista de palabras 
     * @param texto String texto en donde va a buscar
     * @return  tabla con cada palabra y la cantidad de veces que aparece
     */
    public HashMap<String,Integer> encontrarOcurrencias(ArrayList<String> palabras, String texto){
        HashMap<String, Integer> hmOcurrencias = new HashMap<String, Integer>();
        //Para cada palabra en la lista de palabras a buscar
        for(String palabra:palabras){
            int indexTexto = 0;
            //Buscar en la cadena de texto desde el inicio hasta la ultima posicion
            //en donde puede empezar la palabra que estamos buscando
            boolean encontrado = false;
            while(indexTexto <= texto.length() - palabra.length()){
                String fragmento = texto.substring(indexTexto, indexTexto + palabra.length());
                //Si el fragmento que esta leyendo de la cadena de texto es 
                //igual a la palabra que esta buscando
                if(fragmento.equalsIgnoreCase(palabra)){
                    encontrado = true;
                    //Buscar la palabra actual en el hashmap, si no existe, agregarla
                    if(hmOcurrencias.containsKey(palabra)){
                        //Si ya existe, incrementarle 1
                        Integer ocurrencias = hmOcurrencias.get(palabra);
                        ocurrencias += 1;
                        hmOcurrencias.put(palabra, ocurrencias);
                    } else {
                        //Si no existe, adicionarla con 1 ocurrencia
                        hmOcurrencias.put(palabra, new Integer(1));
                    }
                }
                indexTexto ++;
            }
            if(!encontrado){
                hmOcurrencias.put(palabra, new Integer(0));
            }
        }
        return hmOcurrencias;
    }
    
    public StringBuffer pruebaMe(StringBuffer sb){
        //Integer nuevoEntero = new Integer(integer.intValue() + 5);
        
        sb.append("adicional");
        return sb;
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
    }
}
